// 获取应用实例\
var QSSmartSealWX = require("../../utils/QS_Minprogram_SDK_V1.0");
var qssealsdk;
Page({
  data: {
    sealData:{},
    availableCount:100,
    stampTimeOut:180,
    canStart :false
  },
  onShow(){
    var _this = this;
    // 实例化蓝牙操作对象
    qssealsdk = QSSmartSealWX.getInstance();
    // 订阅盖章动作上传事件
    qssealsdk.subscribeStampEvent(_this.onStampCallBack);
    // 订阅报警上传事件
    qssealsdk.subscribeAlarmEvent(_this.onAlarmCallBack);
  },
  // 盖章动作回调
  onStampCallBack(dataResult){
    console.log(dataResult)
  },
  // 报警事件回调
  onAlarmCallBack(dataResult){
    console.log(dataResult)
  },
  // 启动印章
  startSeal(){
    var _this = this;
    // 判断是否有蓝牙权限
    wx.getSetting({
      success(res){
        if(res.authSetting["scope.bluetooth"]){
          // 强制断开已经连接了的印章
          _this.disconnectDevice(_this.startDiscovery);
        } else {
          // 引导用户授权
          wx.authorize({
            scope: 'scope.bluetooth',
            success(){
              // 强制断开已经连接了的印章
              _this.disconnectDevice(_this.startDiscovery);
            },
            fail(){
              // 引导用户打开设置
              wx.showModal({
                title:"蓝牙权限",
                content:'需要使用您的蓝牙搜索和启动印章',
                success(r){
                  if(r.confirm){
                    wx.openSetting({
                      success(res){
                        if(res.authSetting["scope.bluetooth"]){
                          // 强制断开已经连接了的印章
                          _this.disconnectDevice(_this.startDiscovery);
                        } else {
                          wx.showToast({
                            title: '暂无蓝牙权限',
                          })
                        }
                      }
                    })
                  }
                }
              })
            }
          })
        }
      }
    })
  },
  // 开启搜索
  btnStartDiscovery(){
    var _this = this;
    // 判断是否有蓝牙权限
    wx.getSetting({
      success(res){
        if(res.authSetting["scope.bluetooth"]){
          // 强制断开已经连接了的印章
          _this.disconnectDevice(_this.startDiscovery);
        } else {
          // 引导用户授权
          wx.authorize({
            scope: 'scope.bluetooth',
            success(){
              // 强制断开已经连接了的印章
              _this.disconnectDevice(_this.startDiscovery);
            },
            fail(){
              // 引导用户打开设置
              wx.showModal({
                title:"蓝牙权限",
                content:'需要使用您的蓝牙搜索和启动印章',
                success(r){
                  if(r.confirm){
                    wx.openSetting({
                      success(res){
                        if(res.authSetting["scope.bluetooth"]){
                          // 强制断开已经连接了的印章
                          _this.disconnectDevice(_this.startDiscovery);
                        } else {
                          wx.showToast({
                            title: '暂无蓝牙权限',
                          })
                        }
                      }
                    })
                  }
                }
              })
            }
          })
        }
      }
    })
  },
  startDiscovery(){
    var _this = this;
    // 开始执行搜索
    _this.setData({
      showSearch:true,
      'sealData.deviceId':null,
    });
    // 开始搜素印章
    setTimeout(() => {
      qssealsdk.startDiscovery(_this.onDeviceFound);
    }, 1000);
  },
  // 发现设备回调
  onDeviceFound(dataResult){
    var _this = this;
    if(_this.data.sealData.deviceId != null){
      return;
    }
    // 先停止搜素
    _this.stopDiscovery();
    if(dataResult.result){
      // 赋值搜索到的印章对象
      var device = dataResult.data;
      _this.setData({
        'sealData.deviceId':device.deviceId,
        'sealData.mac':device.mac,
        canStart:true
      });
    } else {
      wx.showModal({
        title:'搜索失败',
        content:dataResult.message,
        showCancel:false,
        success(r){

        }
      })
    }
  },
  // 关闭搜索
  stopDiscovery(){
    var _this = this;
    _this.setData({
      showSearch:false
    });
    qssealsdk.stopDiscovery();
  },
  // 连接设备
  connectDevice(){
    var _this = this;
    //开始连接启动印章
    wx.showLoading({
      title: '正在启动印章',
      mask:true,
    })
    var deviceId = _this.data.sealData.deviceId;
    qssealsdk.connectDevice(deviceId,function(res){
      if(res.data.connectStatus){
        _this.setData({
          stampTimeOut:180,
          'sealData.connectStatus':true,
        });
        // 延时2秒
        setTimeout(() => {
          // 握手
          qssealsdk.handshake(_this.onHandshakeCallBack);
        }, 2000);
        // 启动盖章超时定时器
        var t = setInterval(() => {
          _this.stampOverCallBack();
        }, 1000);
        _this.setData({
          stampOverTimer:t
        });
        _this.stampOverCallBack();
      } else {
        wx.hideLoading({
          success: (res) => {},
        })
        if(_this.data.sealData.connectStatus){
            wx.showModal({
            title:'设备断开连接',
            content:'您的印章已经异常断开，用印过程中请不要手动关闭电源！',
            showCancel:false,
            success(r){
              
            }
          })
          _this.setData({
            'sealData.connectStatus':false,
          });
        }
      }
    });
    // 判断连接超时
    setTimeout(() => {
      if(!_this.data.sealData.connectStatus){
        wx.showToast({
          title: '连接超时',
          icon:'error'
        })
        _this.disconnectDevice();
      }
    }, 3000);
  },
  // 盖章超时定时器回调
  stampOverCallBack(){
    var _this = this;
    // 计算盖章超时
    var stampTimeOut = _this.data.stampTimeOut;
    _this.setData({
      stampTimeOut:stampTimeOut - 1
    });
    if(_this.data.stampTimeOut == 0){
      _this.disconnectDevice();
    }
    // 计算是否到了失效时间
    var now = new Date();
    if(_this.data.expireTime - now <= 0){
      _this.disconnectDevice();
    }
  },
  // 握手回调事件
  onHandshakeCallBack(dataResult){
    var _this = this;
    // 验证失败，断开连接
    if(!dataResult.result){
      _this.disconnectDevice();
      wx.showToast({
        title: dataResult.message,
        icon:'none'
      })
      return;
    }
    // 查询电量
    qssealsdk.battery(function(res){
      _this.setData({
        'sealData.battery':res.data.battery,
      });
      // 判断电量，电量过低断开连接
      if(dataResult.data.battery <=10){
        _this.disconnectDevice();
        wx.showToast({
          title:'电量：' + dataResult.data.battery + '，已低于10%,请充电后再使用!',
          icon:'none',
          duration:2000
        })
        return;
      }
      // 设置盖章超时时间为3分钟
      qssealsdk.overTime(1,6,function(res){
        if(res.result){
          // 当前时间
          var crtTime = new Date();
          // 过期时间
          var expireTime = new Date(crtTime.setHours(crtTime.getHours() +1))
          _this.setData({
            availableCount:100,
            stampTimeOut:180,
            expireTime:expireTime,
          })
          var count = _this.data.availableCount
          qssealsdk.startSeal(count,expireTime,_this.onStartCallBack)
        }
      })
    })
  },
  // 电量回调事件
  onBatteryCallBack(dataResult){
    var _this = this;
    _this.setData({
      'sealData.battery':dataResult.data.battery,
    });
  },
  // 启动印章回调
  onStartCallBack(dataResult){
    var _this = this;
    // 启动失败，断开连接
    if(!dataResult.result){
      _this.disconnectDevice();
      wx.showToast({
        title: '印章启动失败!',
        icon:'none'
      })
    } else {
      wx.hideLoading({
        success: (res) => {},
      })
      // 调用接口->启动印章
      _this.setData({
        startNo:dataResult.data.startNo
      });
    }
  },
  // 断开连接
  disconnectDevice(callback){
    wx.hideLoading({
      success: (res) => {},
    })
    var _this = this;
    _this.setData({
      canStart:false,
      'sealData.connectStatus':false,
    });
    // 停止定时器
    if(_this.data.stampOverTimer){
      clearInterval(_this.data.stampOverTimer);
    }
    // 断开连接
    qssealsdk.disConnectDevice();
    if(callback){
      callback();
    }
  },
})
